<?php
declare (strict_types = 1);

// +----------------------------------------------------------------------
// |AdminUser 数据层模型 -- 定义表名、主键、模型关联、获取器、修改器
// +----------------------------------------------------------------------

namespace app\index\model;

use think\Model;

/**
 * @mixin think\Model
 */
class AdminUser extends Model
{
    //绑定表
    protected $table = 'xz_admin_user';

    //绑定主键
    protected $pk = 'id';

    //设置废弃字段
    protected $disuse = ['last_login_ip','last_location'];

    //定义模型数据不区分大小写
    protected $strict = false;

    //定义全局的查询范围
    protected $globalScope = ['role'];

    //定义json类型字段
	protected $json = [];

    // 开启自动写入时间戳字段
    protected $autoWriteTimestamp = true;

    //只读字段
    protected $readonly = [];

    // 设置字段类型自动转换
    protected $type = ['last_login_time','add_time','delte_time','autotime'];


    // 模型初始化
    protected static function init()
    {
        //TODO:初始化内容
    }

    /**
     * 一对一关联模型-参数:
     * 关联模型（必须）：关联模型类名
     * 外键（选填）：默认的外键规则是当前模型名（不含命名空间，下同）+_id ，例如user_id
     * 主键（选填）：当前模型主键，默认会自动获取也可以指定传入
     */
    public function hasOne1()
    {
        return $this->hasOne('');
    }

    /**
     * 绑定属性到父模型
     */
    public function profile()
    {
        return $this->hasOne('', '')->bind(['']);
    }

    /**
     * 一对多关联模型-参数:
     * 关联模型（必须）：关联模型类名
     * 外键（选填）：关联模型外键，默认的外键名规则是当前模型名+_id
     * 主键（选填）：当前模型主键，一般会自动获取也可以指定传入
     */
    public function hasMany1()
    {
        return $this->hasMany('');
    }

    /**
     * 一对一、一对多的相对关联模型-参数:
     * 关联模型（必须）：关联模型类名
     * 外键（选填）：当前模型外键，默认的外键名规则是关联模型名+_id
     * 主键（选填）：关联模型主键，一般会自动获取也可以指定传入
     */
    public function belongsTo1()
    {
        return $this->belongsTo('');
    }

    /**
     *  远程一对多关联模型-参数:
     *  关联模型（必须）：关联模型类名
     *  中间模型（必须）：中间模型类名
     *  外键：默认的外键名规则是当前模型名+_id
     *  中间表关联键：默认的中间表关联键名的规则是中间模型名+_id
     *  当前模型主键：一般会自动获取也可以指定传入
     *  中间模型主键：一般会自动获取也可以指定传入
     */
    public function hasManyThrough1()
    {
        return $this->hasManyThrough('','');
    }
    /**
     *  远程一对一关联模型-参数:
     *  关联模型（必须）：关联模型类名
     *  中间模型（必须）：中间模型类名
     *  外键：默认的外键名规则是当前模型名+_id
     *  中间表关联键：默认的中间表关联键名的规则是中间模型名+_id
     *  当前模型主键：一般会自动获取也可以指定传入
     *  中间模型主键：一般会自动获取也可以指定传入
     */
    public function hasOneThrough1()
    {
        return $this->hasOneThrough('','');
    }


    /**
     *  多对多关联模型-参数：
     *  关联模型（必须）：关联模型类名
     *   中间表：默认规则是当前模型名+_+关联模型名 （可以指定模型名）
     *  外键：中间表的当前模型外键，默认的外键名规则是关联模型名+_id
     * 关联键：中间表的当前模型关联键名，默认规则是当前模型名+_id
     */
    public function belongsToMany1()
    {
        return $this->belongsToMany('');
    }

    /**
     * 多对多相对关联
     */
    public function belongsToMany2()
    {
        return $this->belongsToMany(User::class, Access::class);
    }

    /**
     * 多态关联
     */
    public function morphMany1()
    {
        return $this->morphMany('', '');
    }
    /**
     * 多态 相对关联。
     */
    public function morphTo1()
    {
        return $this->morphTo();
    }

}

